home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / OS / FWThread / FWODThrd.h < prev    next >
Encoding:
Text File  |  1996-09-17  |  2.0 KB  |  84 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWODThrd.h
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //    
  8. // Utility classes for threads. Allocate a SOM Environment and handle
  9. // exceptions.
  10. //    
  11. //========================================================================================
  12.  
  13. #ifndef _FW_ODThrd_
  14. #define _FW_ODThrd_
  15.  
  16. #include "SLODThrd.h"
  17.  
  18. #include <Threads.h>
  19. #include <Timer.h>
  20.  
  21. struct FW_SWakeupTask;
  22.  
  23. extern const FW_PlatformError FW_xThreadKilled;
  24.  
  25. //-----------------------------------------------------------------------------
  26. // FW_CThread
  27. // Wrapper for threads, allocates a SOM Environment and catches exceptions.
  28. //-----------------------------------------------------------------------------
  29.  
  30. typedef ThreadID FW_PlatformThread;
  31.  
  32. class FW_CThread {
  33. public:
  34.                     FW_CThread (void* parameters = kODNULL, FW_ThreadProcedure procedure = kODNULL);
  35.                     ~FW_CThread ();
  36.     
  37.     //
  38.     // Public Interface
  39.     //
  40.     void             Sleep (long ticks);
  41.     void             Suspend ();
  42.     void             Resume ();
  43.     
  44. protected:
  45.     //
  46.     // Customizable Behavior
  47.     //
  48.     virtual void     Run (Environment* ev);
  49. //    virtual void     Switch (FW_Boolean switchingOut);
  50.  
  51. protected:
  52.     //
  53.     // Implementation
  54.     //
  55.     void             PrivKill (FW_Boolean beNiceAboutIt);
  56. #ifdef FW_BUILD_MAC
  57.     // Thread Callbacks
  58.     static pascal void* PrivMacEnter (void* selfThread);
  59.     static pascal void     PrivMacSwitchIn (ThreadID threadBeingSwitched, void* selfThread);
  60.     static pascal void     PrivMacSwitchOut (ThreadID threadBeingSwitched, void* selfThread);
  61.     static pascal void     PrivMacTerminate (ThreadID threadTerminated, void* selfThread);
  62.     // Sleeping
  63.     static pascal void     PrivMacWakeup (TMTaskPtr tmTaskPtr);
  64.     static RoutineDescriptor gMacWakeupInfo;
  65. #else
  66. #error stop
  67. #endif
  68. private:
  69.     //
  70.     // Data
  71.     //
  72.     FW_PlatformThread     fPlatformThread;
  73.     void*                 fParameters;
  74.     FW_ThreadProcedure     fProcedure;
  75. #ifdef FW_BUILD_MAC
  76.     void*                 fResult;
  77. #endif
  78.     // Sleeping    
  79.     FW_SWakeupTask*     fWakeupTask;
  80. };
  81.  
  82. #endif // _FW_ODThrd_
  83.  
  84.